package com.qf.flash.http;

import com.qf.dblib.dao.entity.ChatUserBean;
import com.qf.dblib.dao.entity.UserInfo;
import com.qf.flash.http.response.AreaMsgBean;
import com.qf.flash.http.response.BannerBean;
import com.qf.flash.http.response.BusinessInfoBean;
import com.qf.flash.http.response.GameDetailResponse;
import com.qf.flash.http.response.GroupTipBean;
import com.qf.flash.http.response.JoinTeamBean;
import com.qf.flash.http.response.PayResetResponse;
import com.qf.flash.http.response.PlayConditinoResponse;
import com.qf.flash.http.response.PlayTypeBean;
import com.qf.flash.http.response.ReportTypeBean;
import com.qf.flash.http.response.ScriptDetailResponse;
import com.qf.flash.http.response.ShopOrderBean;
import com.qf.flash.http.response.SysMsgResponse;
import com.qf.flash.http.response.TipsBean;
import com.qf.flash.model.AccountInfoBean;
import com.qf.flash.model.AlipayInfoBean;
import com.qf.flash.model.BalanceBean;
import com.qf.flash.model.CapacityBean;
import com.qf.flash.model.CommentBean;
import com.qf.flash.model.GameGroupBean;
import com.qf.flash.model.GroupDetailBean;
import com.qf.flash.model.HotListBean;
import com.qf.flash.model.LifeDetailsBean;
import com.qf.flash.model.LifeFunBean;
import com.qf.flash.model.MethodDetailsBean;
import com.qf.flash.model.MyCollectShopBean;
import com.qf.flash.model.MyLaunchBean;
import com.qf.flash.model.PayParam;
import com.qf.flash.model.PhotoLinesBean;
import com.qf.flash.model.QrCodeBean;
import com.qf.flash.model.RegionBean;
import com.qf.flash.model.RewardInfoBean;
import com.qf.flash.model.ScriptRoleBean;
import com.qf.flash.model.ScriptRoomBean;
import com.qf.flash.model.StrategyBean;
import com.qf.flash.model.TeamMateBean;
import com.qf.flash.model.TiXianBean;
import com.qf.flash.model.VideoListBean;
import com.qf.flashlib.base.BaseResponse;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import io.reactivex.Observable;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.POST;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;

/**
 * 2018/11/12 15:29
 */
public interface HttpApi {
    /**
     * 获取验证码
     * mobile
     * updateType
     */
    @POST(ApiHost.VER_CODE)
    Observable<BaseResponse<Object>> VER_CODE(@Query("mobile") String mobile, @Query("updateType") int updateType);

    /**
     * 注册
     */
    @POST(ApiHost.REGISTER)
    Observable<BaseResponse<Object>> REGISTER(@QueryMap HashMap<String, String> map);

    /**
     * 登录
     */
    @POST(ApiHost.LOGIN)
    Observable<BaseResponse<UserInfo>> LOGIN(@Query("mobile") String mobile, @Query("password") String password);

    /**
     * 剧本列表
     */
    @POST(ApiHost.PLAY_LIST)
    Observable<BaseResponse<List<ScriptRoomBean>>> PLAY_LIST(@QueryMap HashMap<String, Object> map);

    /**
     * 区域城市列表
     */
    @POST(ApiHost.REGION_LIST)
    Observable<BaseResponse<List<RegionBean>>> REGION_LIST();

    /**
     * 首页轮播图
     */
    @POST(ApiHost.BANNER_LIST)
    Observable<BaseResponse<List<BannerBean>>> BANNER_LIST();

    /**
     * 游戏类型
     */
    @POST(ApiHost.PLAY_TYPES)
    Observable<BaseResponse<List<PlayTypeBean>>> PLAY_TYPES();

    /**
     * 发起游戏
     */
    @POST(ApiHost.START_TEAM)
    Observable<BaseResponse<PayParam>> START_TEAM(@QueryMap Map<String, Object> map);

    /**
     * 修改用户信息
     */
    @POST(ApiHost.SUBMIT_USER_INFO)
    Observable<BaseResponse<Object>> UPDATE_USER(@Body RequestBody body);

    /**
     * 用户信息
     */
    @POST(ApiHost.USER_INFO)
    Observable<BaseResponse<UserInfo>> USER_INFO(@Query("userId") String userId, @Query("loginUser") String loginUserID);

    /**
     * 游戏的搜索条件
     */
    @POST(ApiHost.PLAY_SEARCHES)
    Observable<BaseResponse<PlayConditinoResponse>> PLAY_SEARCHES(@Query("templateId") String templateId, @Query("isShop") String isShop);

    /**
     * 组队列表
     */
    @POST(ApiHost.GAME_WAITE)
    Observable<BaseResponse<List<GameGroupBean>>> GAME_WAITE(@Query("userId") String userId, @Query("areaId") String areaId, @Query("page") int page);

    /**
     * 组队详情
     */
    @POST(ApiHost.GAME_DETAIL)
    Observable<BaseResponse<GameDetailResponse>> GAME_DETAIL(@Query("userId") String uid, @Query("id") String id);

    /**
     * 组队成员
     */
    @POST(ApiHost.GAME_MEMBERS)
    Observable<BaseResponse<List<GameDetailResponse.UsersBean>>> GAME_MEMBERS(@Query("userId") String uid, @Query("orderId") String orderId);

    /**
     * 剧本详情
     */
    @POST(ApiHost.SCRIPT_DETAIL)
    Observable<BaseResponse<ScriptDetailResponse>> SCRIPT_DETAIL(@Query("id") String id);

    /**
     * 剧本角色
     */
    @POST(ApiHost.SCRIPT_ROLE)
    Observable<BaseResponse<List<ScriptRoleBean>>> SCRIPT_ROLE(@Query("playId") String id);

    /**
     * 评论列表
     */
    @POST(ApiHost.COMMENT_LIST)
    Observable<BaseResponse<List<CommentBean>>> COMMENT_LIST(@Query("userId") String uid,
                                                             @Query("playId") String id,
                                                             @Query("pageNo") int page);

    /**
     * 头像背景框
     */
    @POST(ApiHost.GET_PHONELINES)
    Observable<BaseResponse<List<PhotoLinesBean>>> GET_PHONELINES(@Query("userId") String useId);

    /**
     * 我发起的活动
     */
    @POST(ApiHost.MY_START_ORDER_LIST)
    Observable<BaseResponse<List<MyLaunchBean>>> MY_START_LIST(@Query("userId") String uid,
                                                               @Query("pageNo") int num,
                                                               @Query("pageSize") int pageSize);

    /**
     * 圈子  --->  攻略
     */
    @POST(ApiHost.CIRCLE_METHOD_LIST)
    Observable<BaseResponse<List<StrategyBean>>> GET_METHOD_LIST(@Query("typeId") String typeId,
                                                                 @Query("isTop") String isTop,
                                                                 @Query("pageNo") int pageNo,
                                                                 @Query("pageSize") int pageSize);

    /**
     * 攻略详情
     */
    @POST(ApiHost.METHOD_DETAIL)
    Observable<BaseResponse<MethodDetailsBean>> GET_METHOD_DETAILS(@Query("id") String id);

    /**
     * 生活-搞笑
     */
    @POST(ApiHost.LIFE_LIST)
    Observable<BaseResponse<List<LifeFunBean>>> GET_LIFE_LIST(@Query("type") String type,
                                                              @Query("pageNo") int pageNo,
                                                              @Query("pageSize") int pageSize);

    /**
     * 加入组队
     */
    @POST(ApiHost.JOIN_TEAM)
    Observable<BaseResponse<JoinTeamBean>> JOIN_TEAM(@Query("userId") String userId,
                                                     @Query("orderId") String orderId,
                                                     @Query("payType") int payType);

    /**
     * 生活-搞笑详情
     */
    @POST(ApiHost.LIFE_LIST_DETAILS)
    Observable<BaseResponse<LifeDetailsBean>> GET_LIFE_DETAILS(@Query("id") String id);

    /**
     * 视频
     *
     * @param pageNo
     * @param pageSize
     * @return
     */
    @POST(ApiHost.VIDEO_LIST)
    Observable<BaseResponse<List<VideoListBean>>> GET_VIDEO_LIST(@Query("pageNo") int pageNo,
                                                                 @Query("pageSize") int pageSize);

    /**
     * 热门榜
     */
    @POST(ApiHost.HOT_LIST)
    Observable<BaseResponse<List<HotListBean>>> GET_HOT_PLAY_LIST(@Query("areaId") String areaId,
                                                                  @Query("type") String type,
                                                                  @Query("pageNo") int pageNo,
                                                                  @Query("pageSize") int pageSize);

    /**
     * 能力榜
     */
    @POST(ApiHost.CAPACITY_LIST)
    Observable<BaseResponse<List<CapacityBean>>> GET_CAPACITY_LIST(@Query("userId") String uid,
                                                                   @Query("type") String type,
                                                                   @Query("pageNo") int pageNo,
                                                                   @Query("pageSize") int pageSize);

    /**
     * 举报类型
     */
    @POST(ApiHost.REPORT_TYPE)
    Observable<BaseResponse<List<ReportTypeBean>>> REPORT_TYPE();

    /**
     * 举报
     */
    @POST(ApiHost.REPORT_SOMEBODY)
    Observable<BaseResponse<Object>> REPORT_SOMEBODY(@Query("userId") String userID,
                                                     @Query("reportUser") String reportUserID,
                                                     @Query("infoId") String infoId);

    /**
     * 选择商家
     */
    @POST(ApiHost.CHOSE_BUSINESS)
    Observable<BaseResponse<Object>> CHOSE_BUSINESS(@Query("userId") String userID,
                                                    @Query("orderId") String orderId,
                                                    @Query("shopId") String shopId);

    /**
     * 商家详情
     */
    @POST(ApiHost.BUSINESS_DETAIL)
    Observable<BaseResponse<BusinessInfoBean>> BUSINESS_DETAIL(@Query("shopId") String shopId, @Query("userId") String userID);

    /**
     * 商家评论列表
     */
    @POST(ApiHost.BUSINESS_RESPONSE_LIST)
    Observable<BaseResponse<List<CommentBean>>> BUSINESS_RESPONSE_LIST(@Query("shopId") String shopId, @Query("pageNo") int pageNo);

    /**
     * 选择商家列表
     */
    @POST(ApiHost.BUSINESS_LIST)
    Observable<BaseResponse<List<BusinessInfoBean>>> BUSINESS_LIST(@QueryMap Map<String, Object> map);

    /**
     * 我加入的组队
     */
    @POST(ApiHost.MY_JOIN_GAME)
    Observable<BaseResponse<List<MyLaunchBean>>> MY_JOIN_GAME(@Query("userId") String userID,
                                                              @Query("pageNo") int pageNo,
                                                              @Query("pageSize") int pageSize);

    /**
     * 我收藏的商家
     */
    @POST(ApiHost.MY_COLLECT_SHOP_LIST)
    Observable<BaseResponse<List<MyCollectShopBean>>> MY_COLLECT_SHOP_LIST(@Query("userId") String userID,
                                                                           @Query("longitude") String longitude,
                                                                           @Query("latitude") String latitude,
                                                                           @Query("pageNo") int pageNo,
                                                                           @Query("pageSize") int pageSize);

    /**
     * -账户金额
     */
    @POST(ApiHost.GET_MYACCOUNT_INFO)
    Observable<BaseResponse<AccountInfoBean>> GET_MYACCOUNT_INFO(@Query("userId") String userID,
                                                                 @Query("type") String type);


    /**
     * -金额明细
     */
    @POST(ApiHost.GET_ACCOUNTDETAIL_LIST)
    Observable<BaseResponse<List<BalanceBean>>> GET_ACCOUNTDETAIL_LIST(@Query("userId") String userID,
                                                                       @Query("type") String type,
                                                                       @Query("pageNo") int pageNo,
                                                                       @Query("pageSize") int pageSize);


    /**
     * -修改密码uid
     */
    @POST(ApiHost.UPDATE_PASSWORD_BYID)
    Observable<BaseResponse<Object>> UPDATE_PASSWORD_BYID(@Query("userId") String userID,
                                                          @Query("code") String code,
                                                          @Query("password") String password);


    /**
     * -修改密码code
     */
    @POST(ApiHost.UPDATE_PASSWORD)
    Observable<BaseResponse<Object>> UPDATE_PASSWORD_BYPHO(@Query("mobile") String mobile,
                                                           @Query("code") String code,
                                                           @Query("password") String password);

    /**
     * -我的推广二维码
     */
    @POST(ApiHost.MY_QRCODE)
    Observable<BaseResponse<QrCodeBean>> MY_QRCODE(@Query("userId") String userID);

    /**
     * -商家我的订单列表
     */
    @POST(ApiHost.SHOP_ORDER_LIST)
    Observable<BaseResponse<List<ShopOrderBean>>> SHOP_ORDER_LIST(@Query("userId") String userID,
                                                                  @Query("type") String type,
                                                                  @Query("pageNo") int pageNo);

    /**
     * -商家设置担当
     * userId	当前登录用户id
     * orderId	订单id
     * championUser	担当用户id
     * type	设置类型，0mvp,1勇气，2智慧，3颜值
     */
    @POST(ApiHost.GAME_SCORE)
    Observable<BaseResponse<Object>> GAME_SCORE(@Query("userId") String userID,
                                                @Query("orderId") String orderId,
                                                @Query("championUser") String championUser,
                                                @Query("type") int type);

    /**
     * 我的团队成员列表
     */
    @POST(ApiHost.GET_MY_GROUPLIST)
    Observable<BaseResponse<List<TeamMateBean>>> GET_MY_GROUPLIST(@Query("userId") String userID,
                                                                  @Query("pageNo") int pageNo,
                                                                  @Query("pageSize") int pageSize);

    /**
     * 提现首页
     */
    @POST(ApiHost.GET_MY_MONEY)
    Observable<BaseResponse<TiXianBean>> GET_MY_MONEY(@Query("userId") String userID,
                                                      @Query("type") String type);

    /**
     * 绑定支付宝
     */
    @POST(ApiHost.BIND_ZFB)
    Observable<BaseResponse<Object>> BIND_ZFB(@Query("userId") String userID,
                                              @Query("mobile") String mobile,
                                              @Query("bankCard") String bankCard,
                                              @Query("userName") String userName,
                                              @Query("code") String code);

    /**
     * 开始提现
     */
    @POST(ApiHost.TI_XIAN_MONEY)
    Observable<BaseResponse<Object>> TI_XIAN_MONEY(@Query("userId") String userID,
                                                   @Query("bankId") String bankId,
                                                   @Query("type") String type,
                                                   @Query("money") Double money);

    /**
     * 获取area信息
     *
     * @param adCode 高德adCode
     */
    @POST(ApiHost.AREA_MSG_BY_CODE)
    Observable<BaseResponse<AreaMsgBean>> AREA_MSG_BY_CODE(@Query("code") String adCode);

    /**
     * 商家订单大厅
     * userId	是	String	当前登录用户id
     * pageNo	否	Integer	页数，默认从1开始
     * pageSize	否	Integer	每页多少条，默认30
     */
    @POST(ApiHost.OPEN_ORDER_LIST)
    Observable<BaseResponse<List<GameGroupBean>>> OPEN_ORDER_LIST(@Query("userId") String userId, @Query("pageNo") int pageNo);

    /**
     * 商家订单大厅
     * userId	是	String	当前登录用户id
     * type	操作，1接单，0拒单
     * orderId	工单id
     */
    @POST(ApiHost.RECEIVE_REJECT)
    Observable<BaseResponse<Object>> RECEIVE_REJECT(@Query("userId") String userId, @Query("orderId") String orderId, @Query("type") int type);

    /**
     * 支付宝信息
     *
     * @param userID
     * @return
     */
    @POST(ApiHost.ALIPAY_MSG)
    Observable<BaseResponse<AlipayInfoBean>> GET_ALIPAY_MSG(@Query("userId") String userID);

    /**
     * 解绑支付宝
     */
    @POST(ApiHost.UNBIND_ALIPAY)
    Observable<BaseResponse<Object>> UNBIND_ZFB(@Query("userId") String userID,
                                                @Query("bankId") String bankId,
                                                @Query("code") String code);

    /**
     * 好友验证列表
     */
    @POST(ApiHost.CHAT_USER_LIST)
    Observable<BaseResponse<List<ChatUserBean>>> CHAT_USER_LIST(@Query("userId") String userID,
                                                                @Query("ids") String bankId,
                                                                @Query("pageNo") int pageNo,
                                                                @Query("pageSize") int pageSize);

    /**
     * 添加好友
     */
    @POST(ApiHost.ADD_FRIEND)
    Observable<BaseResponse<Object>> ADD_FRIEND(@Query("userId") String userID,
                                                @Query("codeId") String codeId);

    /**
     * 删除好友
     */
    @POST(ApiHost.DELETE_FRIEND)
    Observable<BaseResponse<Object>> DELETE_FRIEND(@Query("userId") String userID,
                                                   @Query("friendId") String friendId);

    /**
     * 好友列表
     */
    @POST(ApiHost.GET_FRIEND_LIST)
    Observable<BaseResponse<List<ChatUserBean>>> GET_FRIEND_LIST(@Query("userId") String userID,
                                                                 @Query("orderId") String orderId,
                                                                 @Query("pageNo") int pageNo,
                                                                 @Query("pageSize") int pageSize);

    /**
     * 支付提示
     */
    @POST(ApiHost.PAY_TIPS)
    Observable<BaseResponse<TipsBean>> PAY_TIPS(@Query("userId") String userID);

    /**
     * 商家设置完成组队
     */
    @POST(ApiHost.SHOP_OP_COMPLETE)
    Observable<BaseResponse<Object>> SHOP_OP_COMPLETE(@Query("userId") String userID, @Query("orderId") String orderId);

    /**
     * 商家设置开始游戏
     */
    @POST(ApiHost.SHOP_OP_START_GAME)
    Observable<BaseResponse<Object>> SHOP_OP_START_GAME(@Query("userId") String userID, @Query("orderId") String orderId);

    /**
     * 商家设置结束游戏
     */
    @POST(ApiHost.SHOP_OP_END_GAME)
    Observable<BaseResponse<Object>> SHOP_OP_END_GAME(@Query("userId") String userID, @Query("orderId") String orderId);

    /**
     * 商家设置尾款
     */
    @POST(ApiHost.SHOP_OP_MONEY)
    Observable<BaseResponse<Object>> SHOP_OP_MONEY(@Query("userId") String userID, @Query("orderId") String orderId, @Query("restFee") double restFee);

    /**
     * 商家剧本列表
     */
    @POST(ApiHost.SHOP_PLAY_LIST)
    Observable<BaseResponse<List<ScriptRoomBean>>> SHOP_PLAY_LIST(@QueryMap Map<String, Object> map);

    /**
     * 群组详情
     */
    @POST(ApiHost.GET_GAME_GROUP_BY_ID)
    Observable<BaseResponse<GroupDetailBean>> GET_GAME_GROUP_BY_ID(@Query("userId") String userID,
                                                                   @Query("groupId") String groupId);

    /**
     * 修改群組信息
     */
    @POST(ApiHost.UPDATE_GAME_GROUP)
    Observable<BaseResponse<Object>> UPDATE_GAME_GROUP(@QueryMap Map<String, Object> map);

    /**
     * 收藏商家
     */
    @POST(ApiHost.INSERT_COLLECT_SHOP)
    Observable<BaseResponse<Object>> INSERT_COLLECT_SHOP(@Query("userId") String userID,
                                                         @Query("shopId") String shopId);


    /**
     * 收藏商家删除
     */
    @POST(ApiHost.DELETE_COLLECT_SHOP)
    Observable<BaseResponse<Object>> DELETE_COLLECT_SHOP(@Query("userId") String userID,
                                                         @Query("ids") String shopIds);

    /**
     * 组队搜索
     */
    @POST(ApiHost.GAME_SEARCH)
    Observable<BaseResponse<List<GameGroupBean>>> GAME_SEARCH(@Query("userId") String userID,
                                                              @Query("name") String name,
                                                              @Query("pageNo") int pageNo);

    /**
     * 组队搜索
     */
    @POST(ApiHost.GET_RANK_REWARD_INFO)
    Observable<BaseResponse<RewardInfoBean>> GET_RANK_REWARD_INFO(@Query("userId") String userID);

    /**
     * 提交商家评论
     */
    @POST(ApiHost.INSERT_SHOP_RESPONSE)
    Observable<BaseResponse<Object>> INSERT_SHOP_RESPONSE(@Query("userId") String userID,
                                                          @Query("shopId") String shopId,
                                                          @Query("content") String content,
                                                          @Query("starNum") Float starNum,
                                                          @Query("orderId") String orderId);

    /**
     * 提交剧本评论
     */
    @POST(ApiHost.INSERT_PLAY_RESPONSE)
    Observable<BaseResponse<Object>> INSERT_PLAY_RESPONSE(@Query("userId") String userID,
                                                          @Query("playId") String playId,
                                                          @Query("content") String content,
                                                          @Query("starNum") Float starNum,
                                                          @Query("orderId") String orderId);

    /**
     * 屏蔽好友(黑名单)
     */
    @POST(ApiHost.BLACK_FRIEND)
    Observable<BaseResponse<Object>> BLACK_FRIEND(@Query("userId") String userID, @Query("blackUserId") String shopId);


    /**
     * 退群或解散群
     */
    @POST(ApiHost.OUT_GAME_GROUP)
    Observable<BaseResponse<Object>> OUT_GAME_GROUP(@Query("userId") String userID, @Query("groupId") String groupId);

    /**
     * 下级城市
     */
    @POST(ApiHost.SUB_CITY)
    Observable<BaseResponse<List<RegionBean>>> SUB_CITY(@Query("pid") String pid);

    /**
     * 组队温馨提示
     */
    @POST(ApiHost.SPONSOR_TIPS)
    Observable<BaseResponse<TipsBean>> SPONSOR_TIPS(@Query("userId") String userId);

    /**
     * 支付尾款
     */
    @POST(ApiHost.PAY_RESET_MONEY)
    Observable<BaseResponse<PayResetResponse>> PAY_RESET_MONEY(@Query("userId") String userId,
                                                               @Query("orderId") String orderId,
                                                               @Query("payType") int payType);

    /**
     * 系统消息
     */
    @POST(ApiHost.SYS_MSG)
    Observable<BaseResponse<List<SysMsgResponse>>> SYS_MSG(@Query("userId") String userId,
                                                           @Query("pageNo") int pageNo,
                                                           @Query("pageSize") int pageSize);

    /**
     * 系统消息
     */
    @POST(ApiHost.CANCEL_BALCK)
    Observable<BaseResponse<Object>> CANCEL_BALCK(@Query("userId") String userId,
                                                  @Query("blackUserId") String blackUserId);

    /**
     * 发起组队时间验证
     */
    @POST(ApiHost.GAME_VALIDE)
    Observable<BaseResponse<Object>> GAME_VALIDE(
            @Query("userId") String userId,
            @Query("startTime") String startTime
    );

    /**
     * 群组聊天规范
     */
    @POST(ApiHost.CHAT_TIPS)
    Observable<BaseResponse<GroupTipBean>> CHAT_TIPS();


}
